package Package10_8;

public class DoubleLinkedListTest {
    public static void main(String[] args) {
        //双向链表
        DoubleLinkedList head=new DoubleLinkedList();//创建一条链表
        DoubleLinkedNode node1=new DoubleLinkedNode("林一",11);
        DoubleLinkedNode node2=new DoubleLinkedNode("王二",12);
        DoubleLinkedNode node3=new DoubleLinkedNode("韩三",13);//创建几个独立的结点
        DoubleLinkedNode node4=new DoubleLinkedNode("沈四",14);

        //将节点连接到链表上
        System.out.println("《《添加节点》》");
        head.addNode(node1);
        head.addNode(node2);
        head.addNode(node3);
        head.addNode(node4);
        head.PrintDoubleLinked();
        System.out.println("《《删除节点》》");
        head.DelNode(node1);
        head.DelNode(node4);
        head.PrintDoubleLinked();

    }
}


class DoubleLinkedList{
    private DoubleLinkedNode head=new DoubleLinkedNode("",0);//头结点

    //添加节点
    public void addNode(DoubleLinkedNode newNode){
        DoubleLinkedNode temp=head;//定义中间变量指向头结点
        while(temp.next!=null){
            //不是最后一个结点，接着找
            temp=temp.next;
        }
        //到达最后一个位置插入新节点
        temp.next=newNode;
        newNode.pre=temp;
    }
    //删除节点
    public void DelNode(DoubleLinkedNode node){//要删除的结点
        DoubleLinkedNode temp=head.next;
        while(true){
            if(temp==node) {
                //找到删除
                if(temp.next==null){
                    temp.pre.next=null;
                }else{
                    //找到删除
                    temp.pre.next=temp.next;
                    temp.next.pre=temp.pre;
                }
                break;
            } else if(temp==null){
                    //此时说明不存在这个结点
                System.out.println("不存在该结点！");
                break;
            }
            temp=temp.next;
        }

    }
    //遍历双向链表
    public void PrintDoubleLinked(){
        DoubleLinkedNode temp=head.next;//指向第一个结点
        if(head.next==null){
            System.out.println("链表为空！");
            return;
        }
        while (true){
            if(temp==null) {
               break;
            }
            System.out.println("姓名：" + temp.getName() + "，年龄：" + temp.getAge());
            temp = temp.next;
        }

    }

}
class DoubleLinkedNode {
    public String name;
    public int age;
    public DoubleLinkedNode pre;//前驱
    public DoubleLinkedNode next;//后继

    public DoubleLinkedNode(String name,int age){
        this.name=name;
        this.age=age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}
